#ifndef AUDIO_SR_H
#define AUDIO_SR_H

#include "esp_afe_sr_iface.h"
#include <freertos/FreeRTOS.h>
#include <freertos/ringbuf.h>

typedef struct audio_sr audio_sr_t;

/**
 * @brief 创建一个语音识别实例
 * 
 * @return audio_sr_t* 语音识别实例
 */
audio_sr_t *audio_sr_create(void);

/**
 * @brief 开启语音识别后台任务
 * 
 * @param audio_sr 语音识别实例
 */
void audio_sr_start(audio_sr_t *audio_sr);

/**
 * @brief 设置唤醒词触发回调
 * 
 * @param audio_sr 语音识别实例
 * @param callback 唤醒词出发以后调用的回调函数
 * @param arg 回调函数参数
 */
void audio_sr_set_wakenet_callback(audio_sr_t *audio_sr, void (*callback)(void *), void *arg);

/**
 * @brief 设置人声检测回调
 * 
 * @param audio_sr 语音识别实例
 * @param callback 人声检测变化后调用的回调函数
 * @param arg 参数
 */
void audio_sr_set_vad_callback(audio_sr_t *audio_sr, void (*callback)(void *, vad_state_t vad_state), void *arg);

/**
 * @brief 设置采集到的人声的环形缓存
 * 
 * @param audio_sr 语音识别实例
 * @param buf 环形缓存
 */
void audio_sr_set_output_buffer(audio_sr_t *audio_sr, RingbufHandle_t buf);

/**
 * @brief 重置唤醒状态
 * 
 * @param audio_sr 语音识别实例
 */
void audio_sr_reset_wakenet(audio_sr_t *audio_sr);

#endif